/**
 * \brief Elementos básicos ao funcionamento de uma Tabela de hash
 * 
 * Definição de um elemento de uma hash (chave,informação)
 */
# ifndef HASH_DEFINITION
# define HASH_DEFINITION

# include "../../base/types.h"
# include <stdlib.h>
# include "hashFunctions.h"
# include "../../io/logs/logSystem.h"

typedef int (*hashFunction)(void *,int);

typedef struct {
        void *key;
        void *data;
} HashMapElem;

/**
 * \brief Cria um novo elemento para uma hash
 * \param key Chave
 * \param data Informação
 * \return Novo par (chave, info)
 *
 * Pode crashar!
 */
HashMapElem * newHashMapElem(void *key, void *data);
/**
 * \brief Liberta a estrutura da memoria
 */
void freeHashMapElem (HashMapElem *elem);

# endif

